/***********************************************************************************
 @file    
 @author
 @attention
 ***********************************************************************************/
#ifndef DEVICE_ADXL345_H
#define DEVICE_ADXL345_H
/* Private includes ----------------------------------------------------------*/
#include "main.h"

/* Private define ------------------------------------------------------------*/
/* ADXL345 寄存器地址定义 */
#define DEVICE_ID        0X00    // 器件ID,0XE5
#define THRESH_TAP       0X1D    // 敲击阀值
#define OFSX             0X1E    // X轴偏移
#define OFSY             0X1F    // Y轴偏移
#define OFSZ             0X20    // Z轴偏移
#define DUR              0X21    // 敲击持续时间
#define Latent           0X22    // 敲击延迟时间
#define ADXL_Window      0X23    // 二次敲击窗口
#define THRESH_ACT       0X24    // 活动阈值
#define THRESH_INACT     0X25    // 不活动阈值
#define TIME_INACT       0X26    // 不活动时间
#define ACT_INACT_CTL    0X27    // 活动/不活动控制
#define THRESH_FF        0X28    // 自由落体阈值
#define TIME_FF          0X29    // 自由落体时间
#define TAP_AXES         0X2A    // 敲击轴使能
#define ACT_TAP_STATUS   0X2B    // 活动/敲击状态
#define BW_RATE          0X2C    // 数据速率和带宽
#define POWER_CTL        0X2D    // 电源控制
#define INT_ENABLE       0X2E    // 中断使能
#define INT_MAP          0X2F    // 中断映射
#define INT_SOURCE       0X30    // 中断源
#define DATA_FORMAT      0X31    // 数据格式
#define DATA_X0          0X32    // X轴数据低字节
#define DATA_X1          0X33    // X轴数据高字节
#define DATA_Y0          0X34    // Y轴数据低字节
#define DATA_Y1          0X35    // Y轴数据高字节
#define DATA_Z0          0X36    // Z轴数据低字节
#define DATA_Z1          0X37    // Z轴数据高字节
#define FIFO_CTL         0X38    // FIFO控制
#define FIFO_STATUS      0X39    // FIFO状态




//如果SD0(12脚)接地,ADXL地址为0X53(不包含最低位).
//如果SD0接V3.3,则ADXL地址为0X1D(不包含最低位).
//这里我的接法是CS和SD0接V3.3,所以转为读写地址后,为 0X3B 和 0X3A 如果接GND,则为 0XA7 和 0XA6 )
//可以根据具体情况来配置

#define ADXL_WRITE      0XA6
#define ADXL_READ       0XA7
/* Private typedef -----------------------------------------------------------*/
typedef struct {
  short x;
  short y;
  short z;
}axis_info_t;
 
typedef struct {
  short x;
  short y;
  short z;
}sample_xyz;	

typedef struct {
    uint8_t status;         // ADXL345 中断状态寄存器值INT_SOURCE
    uint8_t move_alarm;     // 运动检测警告
    uint8_t global_alarm;   // 
    uint8_t test;           // 测试
    uint8_t flag;           // 用来区别2种不同的产品标志
} _adxl345_obj;

extern _adxl345_obj adxl345;
/* Private variables ---------------------------------------------------------*/

/* Private function ----------------------------------------------------------*/
extern uint8_t adxl345_init(void);
extern void    adxl345_read_xyz(short *x,short *y,short *z);
extern void    adxl345_read_xyz_run(char *x,char *y,char *z);
extern void    adxl345_process(void);
							
#endif
